package Modelo;

import Controlador.Controlador;

public class Lexema {

	public String outText = "";
	public Lexico objLexico;

	public void SepararLineas(String Codigo) {

		String[] linea;

		//Controlador objArchivos = new Controlador();

		linea = Codigo.split("\n");
		for (int i = 0; i < linea.length; i++) {
			outText += SepararLexemas(linea[i].replace("\r", "").replace("\t",""));
		}
		//objArchivos.GuardarResultado(outText);
	}

	public String SepararLexemas(String Linea) {
		char caracter;
		int palabra = 1;
		boolean ban = false, flag = false;
		String lexema = "";
		String outText = "";
		String token = "";
		String simbolos = "";
		String pr = "";
		Simbolo objSimbolos;
		objLexico = new Lexico();
		Controlador objArchivos = new Controlador();
		for (int i = 0; i < Linea.length(); i++) {
			caracter = Linea.charAt(i);			
			if (objLexico.Automata(caracter) == -1) {
				flag = true;
				if (lexema.equals("")) {
					if (caracter != ' ') {
						lexema = String.valueOf(caracter);
					} else {
						lexema = "";
					}
				}				
				if (!isNumeric(lexema)) {
					objSimbolos = objLexico.getSimbolo(lexema);
					switch (objSimbolos.getTipo()) {
					case "1":
						token = objSimbolos.getTokenId();
						pr = "PR";
						break;
					case "0":
						pr = "";
						token = objSimbolos.getTokenId();
						break;
					default:
						pr = "";
						if (lexema.length() > 0) {
							simbolos += "ID~" + lexema + "~0\r\n";							
						}
						token = "ID";
						break;
					}
				}
				if (lexema != "") {
					if (isNumeric(lexema)) {
						if ((caracter == '.' || caracter == ',') && !ban) {
							ban = true;
						} else if (ban == true) {
							outText += "REAL" + " ";
							ban = false;
						} else {
							outText += "ENTERO" + " ";
						}
					} else {
						outText += token + " ";
					}
				}
				String aux = String.valueOf(caracter);
				if ((aux != " ") && (lexema.compareTo(aux) != 0) && !ban) {
					outText += aux + " ";
				}
				lexema = "";
				palabra++;
			} else {
				lexema += caracter;
			}
		}
		if (!flag){
			if (lexema.length() > 0) {
				simbolos += "ID~" + lexema + "~0\r\n";
				outText+="ID";				
			}
		}
		objArchivos.GuardarTablaSimbolos(simbolos);
		outText+="\r\n";
		return outText;
	}

	private boolean isNumeric(String lexema) {
		try {
			Integer.parseInt(lexema);
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}
}